/**
 * 数据库操作
 */
const BaseMod = require('../../base');
const dbName = require('./config');

class Dao extends BaseMod {
    constructor() {
        super();
        this.tablePrefix = false; // 不使用表前缀
    }

    async group(data) {
        let { whereJson } = data;
        const dbRes = await this.aggregate(dbName.uniStatSessionLogs, {
            match: whereJson,
            group: {
                _id: {
                    appid: '$appid',
                    version: '$version',
                    platform: '$platform',
                    channel: '$channel',
                },
                // 设备数（去重复）
                device_count: {
                    $addToSet: '$device_id',
                },

                create_time: {
                    $min: '$create_time',
                },
            },
            addFields: {
                device_count: {
                    $size: '$device_count',
                },
            },
            // 按创建时间排序
            sort: {
                create_time: 1,
            },
            getAll: true,
        });

        return dbRes.data;
    }

    async groupCount(whereJson) {
        const dbRes = await this.aggregate(dbName.uniStatSessionLogs, {
            match: whereJson,
            group: {
                _id: null,
                // 设备数（去重复）
                count: {
                    $addToSet: '$device_id',
                },
            },
            addFields: {
                count: {
                    $size: '$count',
                },
            },
            getAll: true,
        });
        try {
            return dbRes.data[0].count;
        } catch (err) {
            return 0;
        }
    }
}

module.exports = new Dao();
